package com.lihh.rocket5.transaction.impl;

import org.apache.rocketmq.client.producer.LocalTransactionState;
import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

/**
 * 事务监听器的实现
 *
 * @author lihh
 */
public class TransactionListenerImpl implements TransactionListener {
  
  // check 本地事务的执行次数
  private int checkLocalCount = 0;
  
  /**
   * 执行本地 事务
   *
   * @param message 传递的消息
   * @param o       操作对象
   * @return 返回本地事务的处理状态
   * @author lihh
   */
  @Override
  public LocalTransactionState executeLocalTransaction(Message message, Object o) {
    System.out.println("1. execute local/ 本地事务执行中...");
    System.out.println("1. execute local/ 本地事务执行失败...");
    return LocalTransactionState.UNKNOW;
  }
  
  /**
   * check 本地事务，一般都是本地事务的 unknown 状态
   *
   * @param messageExt 消息
   * @return 返回的事务状态
   * @author lihh
   */
  @Override
  public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {
    System.out.println("2. check local/ 尝试执行本地事务...");
    checkLocalCount++;
    
    if (checkLocalCount == 2) {
      System.out.println("2. check local/ 本地事务执行 ... 成功");
      return LocalTransactionState.COMMIT_MESSAGE;
    }
    
    System.out.println("2. check local/ 尝试执行本地事务 ... 失败");
    return LocalTransactionState.UNKNOW;
  }
}
